package com.vito.oa.act.extend.action;

import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.dubbo.config.annotation.Reference;
import com.vito.act.model.ActExUserDefinedPro;
import com.vito.base.authoriza.action.BaseAction;
import com.vito.base.authoriza.cache.SessionMap;
import com.vito.base.authoriza.model.UserModel;
import com.vito.base.model.DataGrid;
import com.vito.base.model.MyHashMap;
import com.vito.base.model.ResMsg;
import com.vito.base.model.Result;
import com.vito.base.util.StringUtil;
import com.vito.base.util.Validata;
import com.vito.oa.act.extend.model.OaActExUserDefinedPro;
import com.vito.oa.act.extend.service.OaActExUserDefinedProService;
/**
 * 自定义流程处理人员设置action类
 * @author tianjing
 *
 */
@Controller
@RequestMapping("oa/act/actExUserDef")
public class OaActExUserDefinedProcAction extends BaseAction {
	
	private static final Logger log = LoggerFactory.getLogger(OaActExUserDefinedProcAction.class);
	
	@Reference(group="OaActExUserDefinedProServiceImpl")
	private OaActExUserDefinedProService userDefinedProService;
	
	/**
	 * 查询已设置的流程参与人信息
	 * @return
	 */
	@RequestMapping("getByPaged")
	@ResponseBody
	public Result queryByPage(ActExUserDefinedPro userDefinedPro) {
		Result res = new Result();
		try{
			//获取当前登录用户
			UserModel user = (UserModel) SessionMap.getObj();
			if(null == user){
				res.setCode(Result.CODE_ERROR);
				res.setMsg(ResMsg.MSG_LOGIN_NEED);
				return res;
			}
			if(StringUtil.isEmpty(user.getDeptId())){
				res.setCode(Result.CODE_ERROR);
				res.setMsg("该用户未分配部门，无权进行此操作！");
				return res;
			}
			userDefinedPro.setCreateDept(user.getDeptParentId());
			userDefinedPro.setDeptId(user.getDeptParentId());
			DataGrid<ActExUserDefinedPro> page = userDefinedProService.queryActExUserDefinedProByPage(userDefinedPro);
			if(page.getTotal()!=0){
				res.setCode(Result.CODE_OK);
				res.setData(page);
			}else{
				res.setCode(Result.CODE_NO_DATA);
				res.setMsg("暂无数据");
			}
		}catch(Exception ex){
			log.error("查询异常",ex);
			res.setCode(Result.CODE_ERROR);
			res.setMsg("查询异常");
		}
		return res ;
	}
	@RequestMapping("getUserTree")
	@ResponseBody
	public Result getUserTree(String[] checkeds){
		Result res = new Result();
		//获取当前登录用户
		UserModel user = (UserModel) SessionMap.getObj();
		if(null == user){
			res.setCode(Result.CODE_ERROR);
			res.setMsg(ResMsg.MSG_LOGIN_NEED);
			return res;
		}
		try{
			//查询数据
			List<MyHashMap<String, String>> map = userDefinedProService.getUserTree(checkeds,user);
			if(map!=null&&map.size()>0){
				res.setData(map);
				res.setCode(Result.CODE_OK);
			}else{
				res.setCode(Result.CODE_NO_DATA);
			}
		}catch(Exception ex){
			log.error("查询异常",ex);
			res.setCode(Result.CODE_ERROR);
			res.setMsg("查询异常");
		}
		return res;
	}
	@RequestMapping("getUserImgs")
	@ResponseBody
	public Result getUserImgs(OaActExUserDefinedPro userDefinedPro){
		Result res = new Result();
		try{
			//获取当前登录用户
			UserModel user = (UserModel) SessionMap.getObj();
			if(null == user){
				res.setCode(Result.CODE_ERROR);
				res.setMsg(ResMsg.MSG_LOGIN_NEED);
				return res;
			}
			//如果是系统自定义流程，默认部门sys
			if(Validata.isNullOrEmpty(userDefinedPro.getIsDefined())){
				res.setCode(Result.CODE_ERROR);
				res.setMsg("参数错误！");
				return res;
			}
			userDefinedPro.setDeptId(user.getDeptParentId());
			//查询数据
			List<MyHashMap<String, String>> map = userDefinedProService.getUserImgs(userDefinedPro);
			if(map!=null&&map.size()>0){
				res.setData(map);
				res.setCode(Result.CODE_OK);
			}else{
				res.setCode(Result.CODE_NO_DATA);
			}
		}catch(Exception ex){
			log.error("查询异常",ex);
			res.setCode(Result.CODE_ERROR);
			res.setMsg("查询异常");
		}
		return res;
	}
	/**
	 * 新增
	 * @param deptUser
	 * @return
	 */
	@RequestMapping(value="setDealUsers")
	@ResponseBody
	public Result setDealUsers(OaActExUserDefinedPro userDefinedPro){
		Result res = new Result();
		try{
			//获取当前登录用户
			UserModel user = (UserModel) SessionMap.getObj();
			if(null == user){
				res.setCode(Result.CODE_ERROR);
				res.setMsg(ResMsg.MSG_LOGIN_NEED);
				return res;
			}
			if(StringUtil.isEmpty(user.getDeptParentId())){
				res.setCode(Result.CODE_ERROR);
				res.setMsg("该用户未分配部门，无权进行此操作！");
				return res;
			}
			
			userDefinedPro.setDeptId(user.getDeptParentId());
			int count = userDefinedProService.setDealUsers(userDefinedPro);
			if(count>0){
				res.setCode(Result.CODE_OK);
				res.setMsg(ResMsg.SAVESUC);
			}else{
				res.setCode(Result.CODE_OK);
				res.setMsg(ResMsg.SAVEERR);
			}
		}catch(Exception ex){
			log.error(ResMsg.EXECERR,ex);
			res.setMsg(ResMsg.EXECERR);
			res.setCode(Result.CODE_ERROR);
		}
		return res ;
	}
	/**
	 * 启用/禁用设置
	 * @param userDefinedPro
	 * @return
	 */
	@RequestMapping(value="startSet")
	@ResponseBody
	public Result updateActExUserDefinedPro(ActExUserDefinedPro userDefinedPro){
		Result res = new Result();
		try{
			//获取当前登录用户
			UserModel user = (UserModel) SessionMap.getObj();
			if(null == user){
				res.setCode(Result.CODE_ERROR);
				res.setMsg(ResMsg.MSG_LOGIN_NEED);
				return res;
			}
			if(StringUtil.isEmpty(user.getDeptParentId())){
				res.setCode(Result.CODE_ERROR);
				res.setMsg("该用户未分配部门，无权进行此操作！");
				return res;
			}
			userDefinedPro.setDeptId(user.getDeptParentId());
			int count = userDefinedProService.updateActExUserDefinedPro(userDefinedPro);
			if(count>0){
				res.setCode(Result.CODE_OK);
				res.setMsg("设置成功");
			}else{
				res.setCode(Result.CODE_OK);
				res.setMsg("设置失败");
			}
		}catch(Exception ex){
			log.error(ResMsg.EXECERR,ex);
			res.setMsg(ResMsg.EXECERR);
			res.setCode(Result.CODE_ERROR);
		}
		return res ;
	}
}
